// axios的配置文件
// 引入axios
import axios from 'axios'
// 引入自己修改好的baseURL
import baseURL from './baseUrl'
// 引入qs
import qs from 'qs'

// 创建一个axios实例，用来修改
const http = axios.create({
  // 请求的前缀（整个项目统一配置）
  baseURL:baseURL,
  // 超时时间
  timeout: 1000,
  // 请求头
  // headers
})

// 拦截器：在浏览器和服务器中间架起的防火墙
// 添加请求拦截器
// interceptors:拦截器
http.interceptors.request.use(function (config) {
  // config.headers是请求头
  return config
},function (error) {
  return Promise.reject(error);
})

// 响应拦截器
http.interceptors.response.use(function(data) {
  // data是返回的数据
  return data.data
}, function(error) {
  return Promise.reject(error);
})

export default http


// 思路：调用get这个方法时，要返回一个axios.get()

// url（string）：接口地址；params（obj）：数据
export function get(url, params) {
  return new Promise((resolve, reject) => {
    axios.get(url, {
      params: params
    })
    .then(res => {
      resolve(res.data)
    })
    .catch(err => {
      reject(err.data)
    })
  })
}

// url（string）：接口地址，data（obj）：数据，isFile(boolean)是否包含文件
export function post (url, data1, isFile) {
  // 默认配置。不传文件
  let header = {'Content-Type': 'application/x-www-form-urlencoded'};
  // 序列化数据
  let data = qs.stringify(data1);
  if(isFile) {
    // 如果要传文件,就需要formData
    let fd = new FormData()
    for(let key in data) {
      fd.append(key, data[key])
    }
    // 传文件时，Content-Type要变化
    header = {'Content-Type': 'multipart/form-data'};
  }
  return new Promise((resolve, reject) => {
    axios.post(url, data, header)
    .then(res => {
      resolve(res.data)
    })
    .catch(err => {
      reject(err.data)
    })
  })
}